package com.common.frame.base


import com.common.frame.bean.HttpResponse
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext


open class BaseRepository {

    suspend fun <T : Any> request(call: suspend () -> HttpResponse<T>): HttpResponse<T> {
        return withContext(Dispatchers.IO) { call.invoke() }.apply {
            //这儿可以对返回结果errorCode做一些特殊处理，比如token失效等，可以通过抛出异常的方式实现
            //例：当token失效时，后台返回errorCode 为 100，下面代码实现,再到baseActivity通过观察error来处理
            when (code) {
                "200", "201", "202", "203", "204", "500" -> {
                }
                "800" -> {
                }
                else -> throw Exception(message)
            }
        }
    }

    suspend fun <T : Any> launchGo(call: suspend () -> T): T {
        return withContext(Dispatchers.IO) { call.invoke() }.apply {
            //这儿可以对返回结果errorCode做一些特殊处理，比如token失效等，可以通过抛出异常的方式实现
            //例：当token失效时，后台返回errorCode 为 100，下面代码实现,再到baseActivity通过观察error来处理

        }
    }

    class TokenInvalidException(msg: String = "token invalid") : Exception(msg)
}